package javaAdvanced;

/**
 * @author: cuiH
 * Date: 13-12-1
 * 普通类模拟枚举的实现
 * 灰色部分是最初的实现，然后将这段代码进行了重构
 */
public abstract class People {
    //私有化构造方法
    private People() {
    }

    //这样子在每个子类中包含自己独立的内部子类，实现抽象方法（可以去掉枚举方法大量的if else操作）
    public final static People MY_HONEY = new People(){

        @Override
        public People like() {
            return ME;
        }
    };

    public final static People ME = new People() {
        @Override
        public People like() {
            return MY_HONEY;
        }
    };

    public abstract People like();  //拥有抽象方法的类，必须是抽象类

    /**
     * 最初的枚举实现方法，当枚举类型多的时候会出现大量的if else，进行了代码的重构，用内部类实现
     */
//    public People like(){
//        if(this==MY_HONEY){
//            return ME;
//        }else{
//            return MY_HONEY;
//        }
//    }

    /**
     * 打印方法，覆盖toString
     * 没有toString覆盖，输出为：advancedJava.People@1a758cb
     * toString重写后输出为：myHoney  ,-->要想按照自己的要求去实现输出，需要覆盖toString
     */
    public String toString(){
        return this==ME?"me":"myHoney";
    }

}
